perm filename DIAGY.SAI[PNT,HE] blob
sn#284653 filedate 1977-12-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 PROGRAM TO DRIVE A SINGLE JOINT ON THE ARMS USING THE PDP11 'AL SERVO
C00004 00003 ⊃ PROCEDURES FOR CONVERTING TO AND FROM PDP11/45 NUMBER REPRESENTATION
C00006 00004 PROCEDURE DRIVE(INTEGER ARM,JOINT REAL ANGLE INTEGER DURA)
C00011 00005
C00023 ENDMK
C⊗;
COMMENT PROGRAM TO DRIVE A SINGLE JOINT ON THE ARMS USING THE PDP11 'AL SERVO;
BEGIN "DIAGY"
REQUIRE "TLKEF2.FAI" LOAD_MODULE;
DEFINE ⊃="COMMENT ",CRLF="('15&'12)",FUNCT="1",HEAD="2";
INTEGER ARM,DURA,DUM,JOINT,I,RUN,MASTER,K,J,ANG1,ANG2;
INTEGER LL,UL,POG,MODULUS,BP,DD,III;
INTEGER ARRAY DISPLY[1:'3000];
INTEGER ARRAY DATA[1:3601];
INTEGER ARRAY VEL[1:101],ANG[1:101],MOTOR[1:101];
INTEGER ARRAY TH[1:600],THD[1:600],TORQUE[1:600],STIME[1:600];
STRING WARM,ANS,LINED,GANS,COM1,COM2,COM3;
STRING DISCM;
STRING DANS,RELD;
REAL ANGLE;
LABEL AMPLP,RUNELF,LPEND,BOTTOM;
LABEL ARMLP,MDONE;
EXTERNAL INTEGER PROCEDURE TLKEF2(INTEGER ARM,JOINT,DURA,ANGLE1,ANGLE2,
MASTER);
⊃ PROCEDURES FOR CONVERTING TO AND FROM PDP11/45 NUMBER REPRESENTATION;
REAL PROCEDURE GETFLT(INTEGER NUM1,NUM2);
BEGIN
INTEGER LBYTE;
REAL Z;
LABEL DNE;
LBYTE←'142700000002;
START_CODE
MOVE 1,NUM1;
LSH 1,16;
MOVE 2,NUM2;
ANDI 2,'177777;
IOR 1,2;
SETZ 2,;
DPB 1,LBYTE;
LSH 1,-23;
LSHC 1,-9;
JUMPE 2,DNE;
TLO 2,'400;
JUMPGE 2,DNE;
TLZ 2,'400000;
MOVN 2,2;
DNE: MOVEM 2,Z;
END;
RETURN(Z);
END;
PROCEDURE CONELF(REFERENCE INTEGER NUM1,NUM2;REAL T);
BEGIN
INTEGER BYTE;
LABEL ST1,ST2,OVER;
BYTE←'013200000002;
START_CODE
MOVE 2,T;
JUMPGE 2,ST1;
MOVN 2,2;
TLO 2,'400000;
ST1: JFCL 2,ST2;
ST2: ADDI 2,4;
JFCL 2,OVER;
DPB 2,BYTE;
SETZ 1,;
LSHC 1,16;
MOVEM 1,NUM1;
SETZ 1,;
LSHC 1,16;
MOVEM 1,NUM2;
END;
RETURN;
OVER: OUTSTR("ERROR-ROUNDING OVERFLOW"&CRLF);
RETURN;
END;
PROCEDURE DRIVE(INTEGER ARM,JOINT; REAL ANGLE; INTEGER DURA);
BEGIN "DRIVE"
⊃ ARM← 1 FOR BLUE AND 0 FOR YELLOW;
⊃ START OF RUN TIME CODE;
MASTER←'13131;
⊃ SEND COMMAND TO THE ELF. IF RUN IS NOT ZERO, SOMETHINGS WRONG WITH THE
ELF;
CONELF(ANG1,ANG2,ANGLE);
RUN←TLKEF2(ARM,JOINT,DURA,ANG1,ANG2,MASTER,DATA);
IF RUN=1 THEN GOTO AMPLP
ELSE IF RUN≠0 THEN OUTSTR("ARM STATUS = "&CVOS(-RUN)&CRLF);
END "DRIVE";